package com.ysstech.activiti;


import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import com.ysstech.common.util.SpringContextUtil;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.context.ApplicationContext;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

/**
 * repositoryService：流程仓库Service，用于管理流程仓库，例如：部署，删除，读取流程资源
 * runtimeService：运行时Service，可以处理所有正在运行状态的流程实例，任务等
 * TaskService：任务Service，用于管理，查询任务，例如：签收，办理，指派等
 * IdentityService：身份Service，可以管理，查询用户，组之间的关系
 * historyService：历史Service，可以查询所有历史数据，例如：流程实例，任务，活动，变量，附件等
 * FormService：表单Service，用于读取和流程，任务相关的表单数据
 * ManagementService：引擎管理Service，和具体业务无关，主要是可以查询引擎配置，数据库，作业等
 * DynamicBpmnService：一个新增的服务，用于动态修改流程中的一些参数信息等，是引擎中的一个辅助的服务
 */
@MapperScan({"com.ysstech.common.mapper", "com.ysstech.activiti.mapper"})
@EnableCircuitBreaker
@EnableFeignClients
@EnableTransactionManagement
@SpringBootApplication(exclude = {MultipartAutoConfiguration.class, DruidDataSourceAutoConfigure.class})
public class ActivitiApplication {
    public static void main(String[] args) {
        ApplicationContext applicationContext = SpringApplication.run(ActivitiApplication.class, args);
        new SpringContextUtil().setApplicationContext(applicationContext);
    }
    @Bean(name = "multipartResolver")
    public MultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        resolver.setResolveLazily(true);//resolveLazily属性启用是为了推迟文件解析，以在在UploadAction中捕获文件大小异常
        resolver.setMaxInMemorySize(40960);
        resolver.setMaxUploadSize(5 * 1024 * 1024);//上传文件大小 50M 50*1024*1024
        return resolver;
    }
}
